package com.it.test;


import com.it.config.controller.spring_01_ioc_xml;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/*
 * 【说明】：通过配置文件拿到 IOC容器创建的实例对象
 * 方式一：用于开发（常用）
 *       ClassPathXmlApplicationContext cpx = new ClassPathXmlApplicationContext("spring.xml");
 *
 * 方式二：用于查看源码（仅了解）
 *       构建IOC容器
 *       ClassPathXmlApplicationContext cpx = new ClassPathXmlApplicationContext();
 *       获取配置文件
 *       cpx.setConfigLocation("spring.xml");
 *       刷新容器
 *       cpx.refresh();
 * */

/*
 * 【说明】：获取容器中的组件实例
 * 方式一：通过id获取
 *       直接通过id获取，但是需要强转类型,并且实现类型必须包含无参构造器
 *       HappyComonent happyComoment = (HappyComonent) cpx.getBean("happyComoment");
 *
 * 方式二：通过id + class 获取，指定Bean的实现类的类型
 *       HappyComonent happyComoment = cpx.getBean("happyComoment", HappyComonent.class);
 *
 * 方式三：直接通过Bean的实现类的类型获取
 *       注意：在配置文件中，同一个类型，只能有一个bean!!!,否则报错，无法识别获取的哪一个bean
 *       HappyComonent bean = cpx.getBean(HappyComonent.class);

 * */
public class spring_01_text {
    /*
     * 【测试】：快速入门
     * */
    @Test
    public void test01() {
        // 通过配置文件拿到 IOC容器创建的实例对象
        // 1、获取XML配置文件，(xml,xml...)，可以同时获取多个配置文件
        ClassPathXmlApplicationContext cpx = new ClassPathXmlApplicationContext("spring_ioc_01.xml");
        // 2、通过id + class 获取容器中的组件实例（实例对象）
        spring_01_ioc_xml cpxBean = cpx.getBean(spring_01_ioc_xml.class);
        // 3、调用组件实例的方法（实例对象的方法）
        cpxBean.method();
        // 4、销毁容器
        cpx.close();
    }
}
